package com.lam.framework.security;

import com.lam.common.exception.NoPermissionException;
import com.lam.common.utils.SpringUtils;
import com.lam.framework.security.service.PermissionService;

/**
 * 权限验证工具
 * @author lam
 *
 */
public class PermissionUtil {
	
	private static PermissionService ss;
	
	public static PermissionService ss() {
		if(ss == null) {
			ss = SpringUtils.getBean(PermissionService.class);
		}
		return ss;
	}
	
	/**
	 * 验证用户是否不具备某权限，与 hasPermi逻辑相反
	 * @param perm 权限标识
	 * @return 
	 */
	public static void lacksPermi(String perm) {
		if (!ss().lacksPermi(perm)) {
			throw new NoPermissionException(perm);
		}
	}
	
	/**
	 * 验证用户是否有某权限
	 * 
	 * @param perm 单个权限标识
	 * @return 
	 */
	public static void hasPm(String perm) {
		if (!ss().hasPm(perm)) {
			throw new NoPermissionException(perm);
		}
	}
	
	/**
	 * 验证用户是否有指定的全部权限
	 * 
	 * @param perms 权限标识，多个用英文逗号分隔
	 * @return 
	 */
	public static void hasPms(String perms) {
		if (!ss().hasPms(perms)) {
			throw new NoPermissionException(perms);
		}
	}

	/**
	 * 验证用户是否具有以下任意一个权限
	 * @param perms 权限标识，多个用英文逗号分隔
	 * @return 
	 */
	public static void hasAnyPm(String perms) {
		
		if (!ss().hasAnyPm(perms)) {
			throw new NoPermissionException(perms);
		}
	}

	/**
	 * 验证用户是否不具备某角色，与 isRole逻辑相反。
	 * @param role 角色名称
	 * @return 
	 */
	public static void lacksRole(String role) {
		
		if (!ss().lacksRole(role)) {
			throw new NoPermissionException(role);
		}
	}
	
	/**
	 * 判断用户是否拥有某个角色
	 * @param role 角色标识
	 * @return 
	 */
	public static void hasRole(String role) {
		
		if (!ss().hasRole(role)) {
			throw new NoPermissionException(role);
		}
	}
	
	/**
	 * 判断用户是否拥有某个角色
	 * @param role 角色标识，多个以英文逗号分隔
	 * @return 
	 */
	public static void hasRoles(String roles) {
		
		if (!ss().hasRoles(roles)) {
			throw new NoPermissionException(roles);
		}
	}

	/**
	 * 验证用户是否具有以下任意一个角色
	 * @param roles 角色标识，多个以英文逗号分隔
	 * @return 
	 */
	public static void hasAnyRole(String roles) {
		
		if (!ss().hasAnyRole(roles)) {
			throw new NoPermissionException(roles);
		}
	}
	
}
